package com.gzbugu.bugusys.dao;

import java.io.Serializable;
import java.util.List;

/**
 * 基础DAO类，有基本的增删改查功能
 * 
 * @author gauze
 * 
 */
public interface IBaseDAO {

	/**
	 * 保存
	 * 
	 * @param transientInstance
	 *            瞬息对象
	 */
	public void save(Object transientInstance);

	/**
	 * 删除
	 * 
	 * @param persistentInstance
	 *            持久化对象
	 */
	public void delete(Object persistentInstance);

	/**
	 * 结合更新
	 * 
	 * @param detachedInstance
	 *            托管对象
	 */
	public Object merge(Object detachedInstance);

	/**
	 * 保存或更新
	 * 
	 * @param instance
	 *            vo
	 */
	public void attachDirty(Object instance);

	/**
	 * 将托管对象转变为持久化对象
	 * 
	 * @param instance
	 *            vo
	 */
	public void attachClean(Object instance);

	/**
	 * 根据主键查找
	 * 
	 * @param id
	 *            主键id
	 * @param instance
	 *            vo
	 * @return 返回查找到的对象
	 */
	@SuppressWarnings("unchecked")
	public Object findById(Serializable id, Class cls);

	/**
	 * 根据属性名查找
	 * 
	 * @param propertyName
	 *            属性名
	 * @param value
	 *            属性值
	 * @return 查找到的对象list
	 */
	@SuppressWarnings("unchecked")
	public List findByProperty(String propertyName, Object value, Class cls);

	/**
	 * 查找全部数据
	 * 
	 * @param cls
	 *            查找的对象
	 * @return 查找结果list
	 */
	@SuppressWarnings("unchecked")
	public List findAll(Class cls);

	/**
	 * 统计记录总数
	 * 
	 * @param cls
	 *            统计的对象
	 * @return 总记录数
	 */
	public int countRow(Class cls);
}
